#! /usr/bin/env python
# -*- coding: utf-8 -*-
"""
@File Name: 流的必要条件_test-stream-mode.py
@Author: LTisme
@Date: 2021/8/21 19:38
@Description: 用来说明某些复杂性是如何应用于重定向标准流的，试图连接到通过open生成的文本和二进制模式文件，
              通过print和input内置插件在重定向脚本功能时访问它们。
"""
import sys

############################################################################
# 同样保持socketmakefile为true：输出需要文本模式，但是文本模式会排除无缓冲模式——使用-u或者
# sys.stdout.flush()调用
############################################################################


def reader(F):
    tmp, sys.stdin = sys.stdin, F
    line = input()
    print(line)
    sys.stdin = tmp


def writer(F):
    tmp, sys.stdout = sys.stdout, F
    print(99, b'spam')
    sys.stdout = tmp


if __name__ == '__main__':
    reader(open('流的必要条件_test-stream-mode.py', encoding="utf-8"))                    # 成功运行：input()返回的是文本
    reader(open('流的必要条件_test-stream-mode.py', 'rb'))                                # 成功运行：但input()返回的是字节串

    # writer(open('temp', 'w'))                                       # 成功运行：print()会传递文本内容给.write()
    # print(open('temp').read())

    writer(open('temp', "wb"))                                      # pirnt()会失败：因为二进制模式需要字节串对象，准确地说只有在文本模式下打开才可以用print（输出）
    # writer(open('temp', "w"))                                      # 所以这个会成功
    # writer(open('temp', "w", 0))                                    # open()会失败：因为can't have unbuffered text I/O，即不能在无缓冲的模式下打开文本
